package pe.edu.upc.bolsatrabajo.negocio;

import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import pe.edu.upc.bolsatrabajo.dao.OfertaDAO;
import pe.edu.upc.bolsatrabajo.dao.PostulanteDAO;
import pe.edu.upc.bolsatrabajo.dao.RegistroPostulacionesDAO;
import pe.edu.upc.bolsatrabajo.modelo.Oferta;
import pe.edu.upc.bolsatrabajo.modelo.OfertaResult;
import pe.edu.upc.bolsatrabajo.modelo.Postulante;

/**
 *
 * @author UPC
 */
@Stateless
public class OfertaManager {

    @EJB
    OfertaDAO ofertaDAO;

    @EJB
    PostulanteDAO postulanteDAO;

    @EJB
    RegistroPostulacionesDAO registroPostulacionesDAO;

    public List<Oferta> consultarOfertas(Oferta oferta) {

        if (oferta.getIdcategoria() == null && oferta.getIdempresa() == null) {

            return ofertaDAO.consultarOfertas();

        } else if (oferta.getIdcategoria() != null && oferta.getIdempresa() == null) {

            return ofertaDAO.consultarOfertasByCategoria(oferta.getIdcategoria());

        } else if (oferta.getIdempresa().getIdempresa() != null) {

            if (oferta.getIdcategoria() == null) {

                return ofertaDAO.consultarOfertasByEmpresa(oferta.getIdempresa());

            } else {

                return ofertaDAO.consultarOfertasByCategoriaEmpresa(oferta.getIdcategoria(), oferta.getIdempresa());

            }

        } else {
            return new ArrayList<Oferta>();
        }

    }

    public List<OfertaResult> consultarOfertasResult(Oferta oferta) {

        List<OfertaResult> ofertaResultList = new ArrayList<>();
        try {

            List<Oferta> ofertaList = null;
            if (oferta.getIdcategoria() == null) {
                ofertaList = ofertaDAO.consultarOfertasByEmpresa(oferta.getIdempresa());
                // return ofertaDAO.consultarOfertasByEmpresa(oferta.getIdempresa());

            } else {
                ofertaList = ofertaDAO.consultarOfertasByCategoriaEmpresa(oferta.getIdcategoria(), oferta.getIdempresa());

            }

            for (Oferta _oferta : ofertaList) {
                Integer cantPostulaciones = registroPostulacionesDAO.getCantPostulantesOfertas(_oferta);
                OfertaResult ofertaResult = new OfertaResult();
                ofertaResult.setOferta(_oferta);
                ofertaResult.setCantidadPostulantes(cantPostulaciones);
                ofertaResultList.add(ofertaResult);
            }

        } catch (Exception e) {
            e.printStackTrace();;

            return new ArrayList<OfertaResult>();
        }

        return ofertaResultList;
    }

    public Oferta registarOferta(Oferta oferta) {

        Oferta _oferta = ofertaDAO.registrarOferta(oferta);

        // regla de negocio

        /*if (_oferta != null) {
         List<Postulante> postulantes = postulanteDAO.consultarPostulantes();
         for (Postulante postulante : postulantes) {
         try {
         if(postulante.getCorreo()!=null){
         Util.enviarEmail(postulante.getCorreo(), "Oferta que te puede interesar", "Estimado " + postulante.getNombres() + " tenemos esta oferta para ti "+oferta.getDescripcion());
         }
         } catch (Exception e) {
         e.printStackTrace();
         }
         }

         }*/
        return _oferta;

    }
}
